Purpose

Here we perform a first pass look at the data. We will plot some high-level statistics and see where the various perturbations fall with respect to these readouts. We expect to see that for all readouts, the non-targeting experiments display a central distribution, with most perturbations falling nearby. Perturbations that impact the statistics are expected to appear as outliers.

Initialization

Libraries

library(magrittr)
library(tidyverse)
library(plotly)
library(ggbeeswarm)
library(Matrix)
library(matrixStats)
library(SingleCellExperiment)

Parameters

set.seed(20210818)
FILE_SCE_TX="data/sce/rd7_essential.annot.txs.Rds"

## KNOWN FACTORS
GENES_CPSF <- c("CPSF1", "CPSF2", "CPSF3", "CPSF4", "WDR33", "FIP1L1")
GENES_CF1 <- c("NUDT21", "CPSF6", "CPSF7")
GENES_CF2 <- c("PCF11", "CLP1")
GENES_CSTF <- c("CSTF1", "CSTF2", "CSTF2T", "CSTF3")
GENES_PAF <- c("PAF1", "CTR9", "RTF1")
GENES_NEF <- c("NXF1", "THOC1", "THOC2", "THOC3", "THOC5", "THOC6", "THOC7")
GENES_SPL <- str_c("SRSF", 1:11)
GENES_MTOR <- c("MTOR", "RPTOR", "MLST8", "CLK2", "AKT1")

COLOR_MAP <- c("non-targeting"="grey",
               "CPSF complex"="red4",
               "CFI complex"="purple2",
               "CFII complex"="orange2",
               "CSTF complex"="peachpuff",
               "PAF complex"="steelblue",
               "mRNA export factors"="orchid2",
               "splicing factors"="seagreen1",
               "MTOR complex"="cyan",
               "other"="black")

Data

Loading

sce <- readRDS(FILE_SCE_TX)

Preprocessing

Among our statistics, we will compute the percentage of UMIs corresponding to specific isoform classes, including IPA, proximal, and distal, as well as UMIs from mitochondrial genes.

idx_mt <- rowRanges(sce) %>% 
    unlist %>% as_tibble %>%
    mutate(is_mt=seqnames == "chrM")  %>% 
    select(transcript_id, is_mt) %>%
    deframe() %>%
    `[`(rownames(sce))

df_cells <- colData(sce) %>% as_tibble %>%
    mutate(umis_total=colSums(counts(sce)),
           pct_ipa=colSums(counts(sce[rowData(sce)$is_ipa,]))/umis_total,
           pct_proximal=colSums(counts(sce[rowData(sce)$is_proximal,]))/umis_total,
           pct_distal=colSums(counts(sce[rowData(sce)$is_distal,]))/umis_total,
           pct_novel=colSums(counts(sce[rowData(sce)$is_novel,]))/umis_total,
           pct_mt=colSums(counts(sce[idx_mt,]))/umis_total)

Analysis

UMIs per Cell

df_cells %>%
    ggplot(aes(x=UMI_count, y=umis_total)) +
    geom_density2d_filled() +
    geom_abline(linetype='dashed', color="white") +
    scale_x_log10(expand=c(0,0)) + scale_y_log10(expand=c(0,0)) +
    scale_fill_viridis_d(option="F") +
    theme_bw() +
    labs(x="UMI counts per cell [published]", 
         y="UMI counts per cell [scUTRquant]") +
    guides(fill='none')

Cells per Sample

The scUTRquant QC showed the elbow plots were not well defined for Lanes 21 and 48, which led to very high numbers of barcodes being called as cells. We hope to see that these samples do not have a high number of annotation cells.

df_cells %>%
    mutate(sample_id=fct_infreq(sample_id)) %>%
    ggplot(aes(y=sample_id)) +
    geom_bar(fill='lightgrey', color='black', size=0.2) +
    scale_x_continuous(expand=c(0,0,0.05,0)) +
    theme_bw() +
    labs(x="Cells", y="Sample")

Cells per target

df_cells %>%
    mutate(target_gene=fct_infreq(target_gene)) %>%
    dplyr::count(target_gene, name="n_cells") %>%
    filter(target_gene != 'non-targeting') %>%
    ggplot(aes(x=target_gene, y=n_cells)) +
    geom_bar(stat='identity', fill='grey', width=1) +
    scale_y_log10(expand=c(0,0,0.05,0)) +
    theme_bw() +
    theme(axis.text.x=element_blank(), axis.ticks.x=element_blank()) + 
    labs(x="Target Gene", y="Cells")

There are several perturbations that have extremely low cell counts. Generally, we have used a rule of thumb of at least 200 cells per condition as a lower bound for performing transcriptome-wide differential transcript usage testing (with scUTRboot).

Instead, for the majority of perturbations, we may only be able to characterize high-level changes in transcriptome characteristics rather than at gene-level resolution.

Target Analysis

We will explore whether any perturbations have effects on basic transcriptome characteristics. These will also be compared against each other.

df_targets <- df_cells %>%
    group_by(target_gene, target_gene_id, sgID_AB) %>%
    summarize(n_cells=dplyr::n(),
              mean_umis_total=mean(umis_total),
              pct_ipa=weighted.mean(pct_ipa, umis_total),
              pct_proximal=weighted.mean(pct_proximal, umis_total),
              pct_distal=weighted.mean(pct_distal, umis_total),
              pct_mt=weighted.mean(pct_mt, umis_total), .groups='drop') %>%
    mutate(gene_set=case_when(
        target_gene == "non-targeting" ~ "non-targeting",
        target_gene %in% GENES_CPSF ~ "CPSF complex",
        target_gene %in% GENES_CF1 ~ "CFI complex",
        target_gene %in% GENES_CF2 ~ "CFII complex",
        target_gene %in% GENES_CSTF ~ "CSTF complex",
        target_gene %in% GENES_PAF ~ "PAF complex",
        target_gene %in% GENES_NEF ~ "mRNA export factors",
        target_gene %in% GENES_SPL ~ "splicing factors",
        target_gene %in% GENES_MTOR ~ "MTOR complex",
        TRUE ~ "other"
    ) %>% factor(levels=c("other", "non-targeting", "CPSF complex", 
                          "CFI complex", "CFII complex", "CSTF complex",
                          "PAF complex", "mRNA export factors",
                          "splicing factors", "MTOR complex"))) %>%
    mutate(is_known=!gene_set %in% c("non-targeting", "other"))

Mitochondrial Extremes

df_targets %>%
    select(target_gene, pct_mt, mean_umis_total, sgID_AB) %>%
    slice_max(pct_mt, n=20)
## # A tibble: 20 × 4
##    target_gene pct_mt mean_umis_total sgID_AB                                   
##    <chr>        <dbl>           <dbl> <chr>                                     
##  1 CDK7        0.111           10687. CDK7_+_68530926.23-P1P2|CDK7_-_68530696.2…
##  2 MED28       0.109            8796. MED28_-_17616331.23-P1P2|MED28_+_17616313…
##  3 TAF2        0.106            7062. TAF2_-_120844853.23-P1P2|TAF2_-_120845040…
##  4 TAF10       0.104           10273. TAF10_-_6633436.23-P1P2|TAF10_+_6633406.2…
##  5 MED11       0.104           10082. MED11_-_4635030.23-P1P2|MED11_-_4634925.2…
##  6 MED18       0.104           10356. MED18_-_28655598.23-P1P2|MED18_-_28655606…
##  7 MED27       0.104            8444. MED27_+_134955254.23-P1P2|MED27_-_1349552…
##  8 SUPT4H1     0.104           10982. SUPT4H1_-_56429520.23-P1P2|SUPT4H1_-_5642…
##  9 TAF8        0.102            6762. TAF8_-_42018330.23-P1P2|TAF8_+_42018316.2…
## 10 INCENP      0.102           15260. INCENP_+_61891519.23-P1P2|INCENP_+_618915…
## 11 TAF12       0.102            6530. TAF12_+_28969568.23-P1P2|TAF12_+_28969521…
## 12 POLR2G      0.102           10440. POLR2G_-_62529086.23-P1P2|POLR2G_-_625290…
## 13 RPAP1       0.102            9587. RPAP1_+_41836411.23-P1P2|RPAP1_+_41836408…
## 14 TAF1        0.101            5233. TAF1_-_70586444.23-P1P2|TAF1_+_70586687.2…
## 15 TRRAP       0.101            8527. TRRAP_-_98476562.23-P1P2|TRRAP_-_98476572…
## 16 TAF3        0.100            8224. TAF3_-_7860714.23-P1P2|TAF3_-_7860540.23-…
## 17 FUNDC2      0.100            6881. FUNDC2_-_154255407.23-P1P2|FUNDC2_-_15425…
## 18 URI1        0.0984           9843. URI1_+_30433533.23-P1P2|URI1_+_30433164.2…
## 19 MED29       0.0983           8414. MED29_-_39882017.23-P1P2|MED29_-_39882278…
## 20 TADA3       0.0983           8454. TADA3_+_9834144.23-P1P2|TADA3_-_9834393.2…
df_targets %>%
    select(target_gene, pct_mt, mean_umis_total, sgID_AB) %>%
    slice_min(pct_mt, n=20)
## # A tibble: 20 × 4
##    target_gene  pct_mt mean_umis_total sgID_AB                                  
##    <chr>         <dbl>           <dbl> <chr>                                    
##  1 LRPPRC      0.00516           9018. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_44223…
##  2 MTPAP       0.00875           9507. MTPAP_-_30638029.23-P1P2|MTPAP_-_3063803…
##  3 POLRMT      0.00908           9652. POLRMT_+_633505.23-P1P2|POLRMT_+_633481.…
##  4 OPA1        0.0133           10037. OPA1_+_193310990.23-P1P2|OPA1_-_19331119…
##  5 ZBTB14      0.0136           11388. ZBTB14_-_5295498.23-P1P2|ZBTB14_+_529583…
##  6 CAST        0.0163           11308. CAST_-_95997966.23-P2|CAST_-_95998431.23…
##  7 TOMM22      0.0167           10801. TOMM22_+_39078005.23-P1P2|TOMM22_-_39078…
##  8 TOMM40      0.0173            9585. TOMM40_-_45394587.23-P1P2|TOMM40_-_45394…
##  9 TIMM23B     0.0174            9602. TIMM23B_-_51371488.23-P1P2|TIMM23B_-_513…
## 10 HSPA9       0.0193           10223. HSPA9_-_137911079.23-P1P2|HSPA9_-_137911…
## 11 DNAJA3      0.0202           10141. DNAJA3_+_4475898.23-P1P2|DNAJA3_-_447585…
## 12 POGLUT3     0.0212           10188. KDELC2_-_108369127.23-P1P2|KDELC2_-_1083…
## 13 HSPE1       0.0249           10647. HSPE1_-_198365117.23-P1P2|HSPE1_+_198365…
## 14 LONP1       0.0252           10646. LONP1_+_5720108.23-P1P2|LONP1_+_5720103.…
## 15 PNPT1       0.0254           10788. PNPT1_-_55920888.23-P1P2|PNPT1_-_5592090…
## 16 SAMM50      0.0274            8333. SAMM50_+_44351418.23-P1P2|SAMM50_-_44351…
## 17 PRORP       0.0278            9332. KIAA0391_+_35591777.23-P1P2|KIAA0391_+_3…
## 18 TEFM        0.0278           10525. TEFM_+_29233191.23-P1P2|TEFM_+_29233099.…
## 19 TFAM        0.0282           10072. TFAM_+_60145205.23-P1P2|TFAM_-_60145223.…
## 20 PAM16       0.0292            9825. PAM16_+_4401248.23-P1P2|PAM16_-_4401236.…

IPA Extremes

df_targets %>%
    select(target_gene, pct_ipa, mean_umis_total, sgID_AB) %>%
    slice_max(pct_ipa, n=20)
## # A tibble: 20 × 4
##    target_gene pct_ipa mean_umis_total sgID_AB                                  
##    <chr>         <dbl>           <dbl> <chr>                                    
##  1 HSPA5         0.190           8863. HSPA5_+_128003614.23-P1P2|HSPA5_+_128003…
##  2 EIF3D         0.187          15604. EIF3D_+_36925166.23-P1P2|EIF3D_-_3692515…
##  3 SNRNP200      0.186          10012. SNRNP200_+_96971234.23-P1P2|SNRNP200_-_9…
##  4 ALG11         0.185           5633. ALG11_+_52586530.23-P1P2|ALG11_-_5258654…
##  5 CDC5L         0.185          15023. CDC5L_-_44355475.23-P1P2|CDC5L_+_4435593…
##  6 SRP68         0.184           6927. SRP68_+_74068540.23-P1P2|SRP68_-_7406860…
##  7 SNIP1         0.183           8618. SNIP1_+_38019681.23-P1P2|SNIP1_+_3801979…
##  8 PRPF6         0.183           9112. PRPF6_-_62612504.23-P1P2|PRPF6_+_6261256…
##  9 MFAP1         0.183          10002. MFAP1_+_44116853.23-P1P2|MFAP1_-_4411690…
## 10 SMU1          0.182          11975. SMU1_+_33076608.23-P1P2|SMU1_-_33076622.…
## 11 EIF3E         0.182          15958. EIF3E_+_109260706.23-P1P2|EIF3E_+_109260…
## 12 CHMP2A        0.182          14464. CHMP2A_-_59066282.23-P1P2|CHMP2A_+_59066…
## 13 SLU7          0.181          11552. SLU7_+_159846048.23-P1P2|SLU7_+_15984606…
## 14 HSPA9         0.180          10223. HSPA9_-_137911079.23-P1P2|HSPA9_-_137911…
## 15 CACTIN        0.180           9811. CACTIN_-_3626762.23-P1P2|CACTIN_-_362655…
## 16 PRPF8         0.180          10689. PRPF8_+_1588005.23-P1P2|PRPF8_+_1588152.…
## 17 RBM8A         0.180          13527. RBM8A_-_145507619.23-P1P2|RBM8A_+_145507…
## 18 EIF2S1        0.180           5820. EIF2S1_-_67827085.23-P1P2|EIF2S1_-_67827…
## 19 PSMD2         0.180           9759. PSMD2_+_184017090.23-P1P2|PSMD2_-_184017…
## 20 PRPF31        0.180          10733. PRPF31_-_54619172.23-P1P2|PRPF31_-_54619…
df_targets %>%
    select(target_gene, pct_ipa, mean_umis_total, sgID_AB) %>%
    slice_min(pct_ipa, n=20)
## # A tibble: 20 × 4
##    target_gene pct_ipa mean_umis_total sgID_AB                                  
##    <chr>         <dbl>           <dbl> <chr>                                    
##  1 CPSF4         0.144          10493. CPSF4_-_99036611.23-P1P2|CPSF4_-_9903657…
##  2 RAMAC         0.147          10691. FAM103A1_-_83654987.23-P1P2|FAM103A1_+_8…
##  3 CNOT1         0.148          17545. CNOT1_+_58663696.23-P1P2|CNOT1_-_5866353…
##  4 RNMT          0.148           9612. RNMT_-_13726752.23-P1P2|RNMT_+_13726813.…
##  5 NKX6-1        0.148           6424. NKX6-1_-_85419268.23-P1P2|NKX6-1_-_85418…
##  6 ZC3H18        0.149           9831. ZC3H18_+_88636860.23-P1P2|ZC3H18_+_88636…
##  7 CPSF1         0.149          10440. CPSF1_+_145634685.23-P1P2|CPSF1_-_145634…
##  8 CSTF3         0.149           8380. CSTF3_+_33183038.23-P1P2|CSTF3_-_3318280…
##  9 TAF2          0.149           7062. TAF2_-_120844853.23-P1P2|TAF2_-_12084504…
## 10 PTCD1         0.149          10392. PTCD1_-_99036387.23-P2|PTCD1_+_99036338.…
## 11 CNOT2         0.150          15167. CNOT2_-_70637260.23-P1P2|CNOT2_+_7063765…
## 12 TAF12         0.150           6530. TAF12_+_28969568.23-P1P2|TAF12_+_2896952…
## 13 TPRKB         0.150          10188. TPRKB_+_73964387.23-P1P2|TPRKB_-_7396445…
## 14 CNOT3         0.150          20216. CNOT3_+_54641532.23-P1P2|CNOT3_-_5464169…
## 15 FIP1L1        0.150           9840. FIP1L1_+_54243867.23-P1P2|FIP1L1_-_54244…
## 16 NCBP1         0.151           8811. NCBP1_+_100396123.23-P1P2|NCBP1_+_100396…
## 17 SRRT          0.151          10204. SRRT_+_100472814.23-P1P2|SRRT_+_10047279…
## 18 LAMB1         0.151          14339. LAMB1_-_107643640.23-P1P2|LAMB1_-_107643…
## 19 CHTF8         0.151          14309. CHTF8_+_69166252.23-P1P2|CHTF8_-_6916651…
## 20 YAE1          0.151          10557. YAE1D1_+_39606256.23-P1P2|YAE1D1_-_39606…

Proximal Extremes

df_targets %>%
    select(target_gene, pct_proximal, mean_umis_total, sgID_AB) %>%
    slice_max(pct_proximal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_proximal mean_umis_total sgID_AB                             
##    <chr>              <dbl>           <dbl> <chr>                               
##  1 TAF2               0.220           7062. TAF2_-_120844853.23-P1P2|TAF2_-_120…
##  2 TAF8               0.216           6762. TAF8_-_42018330.23-P1P2|TAF8_+_4201…
##  3 TAF10              0.216          10273. TAF10_-_6633436.23-P1P2|TAF10_+_663…
##  4 TADA3              0.216           8454. TADA3_+_9834144.23-P1P2|TADA3_-_983…
##  5 TRRAP              0.216           8527. TRRAP_-_98476562.23-P1P2|TRRAP_-_98…
##  6 MED27              0.216           8444. MED27_+_134955254.23-P1P2|MED27_-_1…
##  7 CDK7               0.215          10687. CDK7_+_68530926.23-P1P2|CDK7_-_6853…
##  8 TAF3               0.215           8224. TAF3_-_7860714.23-P1P2|TAF3_-_78605…
##  9 TAF1               0.215           5233. TAF1_-_70586444.23-P1P2|TAF1_+_7058…
## 10 MEIS3              0.215           7515. MEIS3_-_47922702.23-P1|MEIS3_-_4792…
## 11 MED28              0.214           8796. MED28_-_17616331.23-P1P2|MED28_+_17…
## 12 MED26              0.213           7521. MED26_+_16738991.23-P1P2|MED26_-_16…
## 13 TAF12              0.213           6530. TAF12_+_28969568.23-P1P2|TAF12_+_28…
## 14 MED18              0.213          10356. MED18_-_28655598.23-P1P2|MED18_-_28…
## 15 SUPT4H1            0.212          10982. SUPT4H1_-_56429520.23-P1P2|SUPT4H1_…
## 16 TAF13              0.212           8856. TAF13_+_109618565.23-P1P2|TAF13_+_1…
## 17 RPAP3              0.212           7776. RPAP3_+_48099773.23-P1P2|RPAP3_+_48…
## 18 FUNDC2             0.212           6881. FUNDC2_-_154255407.23-P1P2|FUNDC2_-…
## 19 POLR2G             0.212          10440. POLR2G_-_62529086.23-P1P2|POLR2G_-_…
## 20 URI1               0.210           9843. URI1_+_30433533.23-P1P2|URI1_+_3043…
df_targets %>%
    select(target_gene, pct_proximal, mean_umis_total, sgID_AB) %>%
    slice_min(pct_proximal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_proximal mean_umis_total sgID_AB                             
##    <chr>              <dbl>           <dbl> <chr>                               
##  1 HSPA9              0.130          10223. HSPA9_-_137911079.23-P1P2|HSPA9_-_1…
##  2 TIMM23B            0.130           9602. TIMM23B_-_51371488.23-P1P2|TIMM23B_…
##  3 POLRMT             0.132           9652. POLRMT_+_633505.23-P1P2|POLRMT_+_63…
##  4 OPA1               0.133          10037. OPA1_+_193310990.23-P1P2|OPA1_-_193…
##  5 MTPAP              0.134           9507. MTPAP_-_30638029.23-P1P2|MTPAP_-_30…
##  6 LRPPRC             0.134           9018. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_…
##  7 ZBTB14             0.136          11388. ZBTB14_-_5295498.23-P1P2|ZBTB14_+_5…
##  8 TOMM40             0.136           9585. TOMM40_-_45394587.23-P1P2|TOMM40_-_…
##  9 TOMM22             0.136          10801. TOMM22_+_39078005.23-P1P2|TOMM22_-_…
## 10 HSPE1              0.136          10647. HSPE1_-_198365117.23-P1P2|HSPE1_+_1…
## 11 CAST               0.139          11308. CAST_-_95997966.23-P2|CAST_-_959984…
## 12 SAMM50             0.141           8333. SAMM50_+_44351418.23-P1P2|SAMM50_-_…
## 13 PMPCA              0.141           9951. PMPCA_-_139305175.23-P1P2|PMPCA_-_1…
## 14 POGLUT3            0.142          10188. KDELC2_-_108369127.23-P1P2|KDELC2_-…
## 15 PAM16              0.142           9825. PAM16_+_4401248.23-P1P2|PAM16_-_440…
## 16 DNAJA3             0.142          10141. DNAJA3_+_4475898.23-P1P2|DNAJA3_-_4…
## 17 GRPEL1             0.143           9135. GRPEL1_+_7069324.23-P1P2|GRPEL1_+_7…
## 18 LONP1              0.143          10646. LONP1_+_5720108.23-P1P2|LONP1_+_572…
## 19 RBX1               0.146          18797. RBX1_-_41347436.23-P1P2|RBX1_+_4134…
## 20 TTC1               0.146          10814. TTC1_-_159436216.23-P1P2|TTC1_-_159…

Distal Extremes

df_targets %>%
    select(target_gene, pct_distal, mean_umis_total, sgID_AB) %>%
    slice_max(pct_distal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_distal mean_umis_total sgID_AB                               
##    <chr>            <dbl>           <dbl> <chr>                                 
##  1 TAF2             0.521           7062. TAF2_-_120844853.23-P1P2|TAF2_-_12084…
##  2 NKX6-1           0.519           6424. NKX6-1_-_85419268.23-P1P2|NKX6-1_-_85…
##  3 TAF10            0.517          10273. TAF10_-_6633436.23-P1P2|TAF10_+_66334…
##  4 TAF12            0.517           6530. TAF12_+_28969568.23-P1P2|TAF12_+_2896…
##  5 TAF8             0.516           6762. TAF8_-_42018330.23-P1P2|TAF8_+_420183…
##  6 FUNDC2           0.515           6881. FUNDC2_-_154255407.23-P1P2|FUNDC2_-_1…
##  7 TAF3             0.513           8224. TAF3_-_7860714.23-P1P2|TAF3_-_7860540…
##  8 CPSF4            0.513          10493. CPSF4_-_99036611.23-P1P2|CPSF4_-_9903…
##  9 TAF1             0.511           5233. TAF1_-_70586444.23-P1P2|TAF1_+_705866…
## 10 TAF7             0.511           8948. TAF7_+_140700244.23-P1P2|TAF7_+_14070…
## 11 SRRT             0.510          10204. SRRT_+_100472814.23-P1P2|SRRT_+_10047…
## 12 MEIS3            0.510           7515. MEIS3_-_47922702.23-P1|MEIS3_-_479227…
## 13 SUPT5H           0.509           6117. SUPT5H_-_39936298.23-P1P2|SUPT5H_-_39…
## 14 CDK7             0.509          10687. CDK7_+_68530926.23-P1P2|CDK7_-_685306…
## 15 NCBP1            0.507           8811. NCBP1_+_100396123.23-P1P2|NCBP1_+_100…
## 16 GTF2A1           0.507          10284. GTF2A1_+_81687215.23-P1P2|GTF2A1_+_81…
## 17 TAF5             0.506           7740. TAF5_-_105127776.23-P1P2|TAF5_+_10512…
## 18 MRPS34           0.506           8790. MRPS34_+_1823083.23-P1P2|MRPS34_-_182…
## 19 TYK2             0.506           8035. TYK2_+_10491184.23-P1P2|TYK2_-_104911…
## 20 TAF11            0.505          10288. TAF11_-_34855779.23-P1P2|TAF11_-_3485…
df_targets %>%
    select(target_gene, pct_distal, mean_umis_total, sgID_AB) %>%
    slice_min(pct_distal, n=20)
## # A tibble: 20 × 4
##    target_gene pct_distal mean_umis_total sgID_AB                               
##    <chr>            <dbl>           <dbl> <chr>                                 
##  1 CPSF6            0.443           9471. CPSF6_+_69633592.23-P1P2|CPSF6_+_6963…
##  2 TIMM23B          0.448           9602. TIMM23B_-_51371488.23-P1P2|TIMM23B_-_…
##  3 NUDT21           0.448          11075. NUDT21_+_56485197.23-P1P2|NUDT21_-_56…
##  4 HSPA9            0.450          10223. HSPA9_-_137911079.23-P1P2|HSPA9_-_137…
##  5 POLRMT           0.450           9652. POLRMT_+_633505.23-P1P2|POLRMT_+_6334…
##  6 MTPAP            0.451           9507. MTPAP_-_30638029.23-P1P2|MTPAP_-_3063…
##  7 OPA1             0.451          10037. OPA1_+_193310990.23-P1P2|OPA1_-_19331…
##  8 LRPPRC           0.451           9018. LRPPRC_+_44223082.23-P1P2|LRPPRC_-_44…
##  9 TOMM40           0.452           9585. TOMM40_-_45394587.23-P1P2|TOMM40_-_45…
## 10 CDC5L            0.452          15023. CDC5L_-_44355475.23-P1P2|CDC5L_+_4435…
## 11 COPG1            0.452          11614. COPG1_-_128968486.23-P1|COPG1_+_12896…
## 12 TOMM22           0.453          10801. TOMM22_+_39078005.23-P1P2|TOMM22_-_39…
## 13 ZBTB14           0.453          11388. ZBTB14_-_5295498.23-P1P2|ZBTB14_+_529…
## 14 EIF3E            0.453          15958. EIF3E_+_109260706.23-P1P2|EIF3E_+_109…
## 15 HSPE1            0.454          10647. HSPE1_-_198365117.23-P1P2|HSPE1_+_198…
## 16 PAM16            0.454           9825. PAM16_+_4401248.23-P1P2|PAM16_-_44012…
## 17 GRPEL1           0.454           9135. GRPEL1_+_7069324.23-P1P2|GRPEL1_+_706…
## 18 SLU7             0.455          11552. SLU7_+_159846048.23-P1P2|SLU7_+_15984…
## 19 PSMB6            0.455           7566. PSMB6_-_4699495.23-P1|PSMB6_-_4699534…
## 20 CAST             0.455          11308. CAST_-_95997966.23-P2|CAST_-_95998431…

Pair Plots

Proximal vs Distal

g <- df_targets %>%
    ggplot(aes(x=pct_proximal, y=pct_distal, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from proximal isoforms",
         y="Percent UMIs from distal isoforms",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_proximal, y=pct_distal, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from proximal isoforms",
         y="Percent UMIs from distal isoforms",
         color="Gene Set")

Naively, we would expect these to compensatory statistics, however, in this first pass we include also single-UTR isoforms, which are labeled as both “proximal” and “distal”. This possibly explains the strong positive correlation.

We observe here three major outliers that

  • NUDT21
  • CPSF6
  • OGFOD1

The first two are major cleavage enhancement factors that co-complex and bind RNA around UGUA motifs found 40-80 nts upstream of the mRNA cleavage site. OGFOD1 has no known regulatory effect on 3’ UTR isoform usage in mammals, though it is a homolog of Tpa1 (Sac. cer.), which stands for “Termination and Polyadenylation 1”.

This could represent novel function.

IPA vs Proximal

g <- df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_proximal, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from proximal isoforms",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_proximal, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from proximal isoforms",
         color="Gene Set")

IPA vs Distal

g <- df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_distal, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from distal isoforms",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_distal, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from distal isoforms",
         color="Gene Set")

IPA vs MT

g <- df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_ipa, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from IPA isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")

Proximal vs MT

g <- df_targets %>%
    ggplot(aes(x=pct_proximal, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from proximal isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_proximal, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from proximal isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")

Distal vs MT

g <- df_targets %>%
    ggplot(aes(x=pct_distal, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(aes(size=n_cells), pch=16) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    theme(legend.position="none") +
    labs(x="Percent UMIs from distal isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")
    
ggplotly(g, tooltip=c("text", "x", "y", "gene_set", "n_cells"))
df_targets %>%
    ggplot(aes(x=pct_distal, y=pct_mt, color=gene_set, text=target_gene)) +
    geom_point(data=filter(df_targets, gene_set == 'other'), size=0.5) +
    geom_point(data=filter(df_targets, gene_set == 'non-targeting'), size=0.5) +
    geom_point(data=filter(df_targets, is_known), size=3) +
    geom_rug(size=0.1) +
    scale_color_manual(values=COLOR_MAP) +
    scale_size_continuous(range=c(0.05, 3)) +
    scale_x_continuous(labels=scales::percent_format(accuracy=0.1)) +
    scale_y_continuous(labels=scales::percent_format(accuracy=0.1)) +
    theme_bw() +
    labs(x="Percent UMIs from distal isoforms",
         y="Percent UMIs from chrM",
         color="Gene Set")

Conclusion

The data set appears consistent with being well-processed and coherent. The most interesting observation is the significant perturbation of distal -> proximal isoforms in the knockdowns of the NUDT21, CPSF6, and OGDOF1. It should be noted that OGDOF1 and NUDT21 form a divergent gene pair, raising the possibility that CRISPRi targeting OGDOF1 also impacts NUDT21 expression levels, and thus does not have any significant effect on isoform usage itself. Examining heatmaps from both the KD6 and KD8 experiments shows that in the OGDOF1 perturbations, NUDT21 expression was also reduced to a similar z-score (though slightly higher than a direct NUDT21 perturbation).

Additionally, both the NUDT21 and OGDOF1 perturbations resulted in similar upregulation of CPSF6 levels, however, CPSF6 perturbation showed only upregulation of NUDT21, with no change in OGDOF1 expression.


Runtime Details

Session Info

## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: macOS Big Sur 10.16
## 
## Matrix products: default
## BLAS/LAPACK: /Users/mfansler/miniconda3/envs/bioc_3_14/lib/libopenblasp-r0.3.18.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats4    stats     graphics  grDevices utils     datasets  methods  
## [8] base     
## 
## other attached packages:
##  [1] SingleCellExperiment_1.16.0 SummarizedExperiment_1.24.0
##  [3] Biobase_2.54.0              GenomicRanges_1.46.0       
##  [5] GenomeInfoDb_1.30.0         IRanges_2.28.0             
##  [7] S4Vectors_0.32.0            BiocGenerics_0.40.0        
##  [9] MatrixGenerics_1.6.0        matrixStats_0.61.0         
## [11] Matrix_1.3-4                ggbeeswarm_0.6.0           
## [13] plotly_4.10.0               forcats_0.5.1              
## [15] stringr_1.4.0               dplyr_1.0.8                
## [17] purrr_0.3.4                 readr_2.1.1                
## [19] tidyr_1.1.4                 tibble_3.1.7               
## [21] ggplot2_3.3.5               tidyverse_1.3.1            
## [23] magrittr_2.0.3             
## 
## loaded via a namespace (and not attached):
##  [1] bitops_1.0-7           fs_1.5.2               lubridate_1.8.0       
##  [4] httr_1.4.2             tools_4.1.1            backports_1.4.0       
##  [7] bslib_0.3.1            utf8_1.2.2             R6_2.5.1              
## [10] vipor_0.4.5            DBI_1.1.1              lazyeval_0.2.2        
## [13] colorspace_2.0-2       withr_2.4.3            tidyselect_1.1.1      
## [16] compiler_4.1.1         cli_3.3.0              rvest_1.0.2           
## [19] xml2_1.3.3             isoband_0.2.5          DelayedArray_0.20.0   
## [22] labeling_0.4.2         sass_0.4.0             scales_1.1.1          
## [25] digest_0.6.29          rmarkdown_2.11         XVector_0.34.0        
## [28] pkgconfig_2.0.3        htmltools_0.5.2        highr_0.9             
## [31] dbplyr_2.1.1           fastmap_1.1.0          htmlwidgets_1.5.4     
## [34] rlang_1.0.2            readxl_1.3.1           rstudioapi_0.13       
## [37] farver_2.1.0           jquerylib_0.1.4        generics_0.1.1        
## [40] jsonlite_1.7.2         crosstalk_1.2.0        RCurl_1.98-1.5        
## [43] GenomeInfoDbData_1.2.7 Rcpp_1.0.7             munsell_0.5.0         
## [46] fansi_0.5.0            lifecycle_1.0.1        stringi_1.7.6         
## [49] yaml_2.2.1             MASS_7.3-54            zlibbioc_1.40.0       
## [52] grid_4.1.1             crayon_1.4.2           lattice_0.20-45       
## [55] haven_2.4.3            hms_1.1.1              knitr_1.39            
## [58] pillar_1.7.0           reprex_2.0.1           glue_1.6.2            
## [61] evaluate_0.15          data.table_1.14.2      modelr_0.1.8          
## [64] vctrs_0.4.1            tzdb_0.2.0             cellranger_1.1.0      
## [67] gtable_0.3.0           assertthat_0.2.1       xfun_0.30             
## [70] broom_0.8.0            viridisLite_0.4.0      beeswarm_0.4.0        
## [73] ellipsis_0.3.2

Conda Environment

## Conda Environment YAML
name: base
channels:
  - conda-forge
  - bioconda
  - defaults
dependencies:
  - anaconda-client=1.8.0=pyhd8ed1ab_0
  - anaconda-project=0.10.2=pyhd8ed1ab_0
  - attrs=21.2.0=pyhd8ed1ab_0
  - awscli=1.25.79=py39h6e9494a_0
  - backports=1.0=py_2
  - backports.functools_lru_cache=1.6.4=pyhd8ed1ab_0
  - backports.zoneinfo=0.2.1=py39h701faf5_5
  - bagit=1.8.1=pyhd8ed1ab_0
  - bagit-profile=1.3.1=pyhd8ed1ab_0
  - bdbag=1.6.1=pyhd8ed1ab_0
  - beautifulsoup4=4.9.3=pyhb0f4dca_0
  - blinker=1.4=py_1
  - boa=0.13.0=pyha770c72_0
  - boolean.py=3.7=py_0
  - boto3=1.24.78=pyhd8ed1ab_0
  - botocore=1.27.78=pyhd8ed1ab_0
  - brotlipy=0.7.0=py39h63b48b0_1004
  - bzip2=1.0.8=h0d85af4_4
  - c-ares=1.18.1=h0d85af4_0
  - ca-certificates=2022.9.24=h033912b_0
  - cachecontrol=0.12.11=pyhd8ed1ab_0
  - cairo=1.16.0=he43a7df_1008
  - cctools=973.0.1=hd9211c8_2
  - cctools_osx-64=973.0.1=h3e07e27_2
  - certifi=2022.9.24=pyhd8ed1ab_0
  - cffi=1.15.1=py39hae9ecf2_0
  - chardet=5.0.0=py39h6e9494a_0
  - charset-normalizer=2.0.0=pyhd8ed1ab_0
  - click=8.1.3=py39h6e9494a_0
  - clyent=1.2.2=py_1
  - colorama=0.4.3=py_0
  - commonmark=0.9.1=py_0
  - conda=4.14.0=py39h6e9494a_0
  - conda-build=3.21.9=py39h6e9494a_1
  - conda-forge-pinning=2021.10.10.22.03.30=hd8ed1ab_0
  - conda-libmamba-solver=22.6.0=pyhd8ed1ab_0
  - conda-pack=0.6.0=pyhd3deb0d_0
  - conda-package-handling=1.9.0=py39ha30fb19_0
  - conda-smithy=3.17.2=pyhd8ed1ab_0
  - conda-standalone=4.10.3=h694c41f_0
  - conda-suggest=0.1.1=pyh9f0ad1d_0
  - conda-suggest-conda-forge=2021.8.24=h694c41f_0
  - conda-verify=3.1.1=py39h6e9494a_1004
  - constructor=3.3.1=py39h6e9494a_0
  - cryptography=38.0.3=py39h7eb6a14_0
  - curl=7.86.0=h57eb407_1
  - dataclasses=0.8=pyhc8e2a94_3
  - dbus=1.13.6=ha13b53f_2
  - deprecated=1.2.12=pyh44b312d_0
  - docutils=0.16=py39h6e9494a_3
  - expat=2.4.1=he49afe7_0
  - ffq=0.2.1=pyhdfd78af_0
  - filelock=3.0.12=pyh9f0ad1d_0
  - fmt=9.1.0=hb8565cd_0
  - font-ttf-dejavu-sans-mono=2.37=hab24e00_0
  - font-ttf-inconsolata=3.000=h77eed37_0
  - font-ttf-source-code-pro=2.038=h77eed37_0
  - font-ttf-ubuntu=0.83=hab24e00_0
  - fontconfig=2.13.1=h10f422b_1005
  - fonts-conda-ecosystem=1=0
  - fonts-conda-forge=1=0
  - freetype=2.10.4=h4cff582_1
  - fribidi=1.0.10=hbcb3906_0
  - frozendict=2.3.4=py39h701faf5_0
  - future=0.18.2=py39h6e9494a_5
  - gawk=5.1.0=h8a989fb_0
  - gdk-pixbuf=2.42.6=h2e6141f_0
  - gettext=0.21.1=h8a4c099_0
  - giflib=5.2.1=hbcb3906_2
  - git=2.34.1=pl5321h9a53687_0
  - git-lfs=2.13.3=h694c41f_0
  - gitdb=4.0.7=pyhd8ed1ab_0
  - gitpython=3.1.18=pyhd8ed1ab_0
  - glib=2.70.2=hcf210ce_0
  - glib-tools=2.70.2=hcf210ce_0
  - glob2=0.7=py_0
  - globus-sdk=2.0.1=pyhd8ed1ab_0
  - gmp=6.2.1=h2e338ed_0
  - gnutls=3.6.13=h756fd2b_1
  - graphite2=1.3.13=h2e338ed_1001
  - harfbuzz=2.9.0=h159f659_0
  - htop=3.2.1=h398481e_0
  - htslib=1.15=hc057d7f_0
  - hub=2.14.2=hc7d050b_0
  - icu=68.1=h74dc148_0
  - idna=3.1=pyhd3deb0d_0
  - importlib-metadata=4.11.4=py39h6e9494a_0
  - importlib_metadata=4.11.4=hd8ed1ab_0
  - importlib_resources=5.4.0=pyhd8ed1ab_0
  - inotify_simple=1.3.5=pyha770c72_3
  - ipython_genutils=0.2.0=py_1
  - isodate=0.6.0=py_1
  - jbig=2.1=h0d85af4_2003
  - jinja2=3.0.1=pyhd8ed1ab_0
  - jmespath=0.10.0=pyh9f0ad1d_0
  - joblib=1.0.1=pyhd8ed1ab_0
  - jpeg=9d=hbcb3906_0
  - json5=0.9.5=pyh9f0ad1d_0
  - jsonschema=4.3.1=pyhd8ed1ab_0
  - jupyter_core=4.11.1=py39h6e9494a_0
  - krb5=1.19.3=hb49756b_0
  - ld64=609=hd2e7500_2
  - ld64_osx-64=609=h2487922_2
  - ldid=2.1.2=h6a69015_3
  - lerc=2.2.1=h046ec9c_0
  - libarchive=3.5.2=h2b60450_1
  - libcurl=7.86.0=h57eb407_1
  - libcxx=14.0.6=hccf4f1f_0
  - libdeflate=1.10=h0d85af4_0
  - libedit=3.1.20191231=h0678c8f_2
  - libev=4.33=haf1e3a3_1
  - libffi=3.4.2=h0d85af4_5
  - libglib=2.70.2=hf1fb8c0_0
  - libiconv=1.17=hac89ed1_0
  - libidn2=2.3.2=h0d85af4_0
  - liblief=0.11.5=he49afe7_0
  - libllvm12=12.0.1=hd011deb_2
  - libmamba=1.0.0=h2bf831e_2
  - libmambapy=1.0.0=py39he069e75_2
  - libnghttp2=1.47.0=h7cbc4dc_1
  - libpng=1.6.37=h7cec526_2
  - librsvg=2.50.7=hd2a7919_0
  - libsolv=0.7.22=hd9580d2_0
  - libssh2=1.10.0=h7535e13_3
  - libtiff=4.3.0=h1167814_0
  - libunistring=0.9.10=h0d85af4_0
  - libwebp-base=1.2.1=h0d85af4_0
  - libxml2=2.9.12=h93ec3fd_0
  - libxslt=1.1.33=h5739fc3_2
  - libzlib=1.2.13=hfd90126_4
  - license-expression=1.2=py_0
  - lockfile=0.12.2=py_1
  - lxml=4.8.0=py39h63b48b0_2
  - lz4-c=1.9.3=he49afe7_1
  - lzo=2.10=haf1e3a3_1000
  - mamba=1.0.0=py39ha435c47_2
  - markupsafe=2.1.1=py39h63b48b0_1
  - msgpack-python=1.0.4=py39h92daf61_1
  - msrest=0.6.21=pyh44b312d_0
  - nbformat=5.1.3=pyhd8ed1ab_0
  - ncurses=6.3=h96cf925_1
  - nettle=3.6=hedd7734_0
  - oauthlib=3.1.1=pyhd8ed1ab_0
  - openssl=1.1.1s=hfd90126_0
  - pango=1.48.9=ha05cd14_0
  - patch=2.7.6=hbcf498f_1002
  - pcre=8.45=he49afe7_0
  - pcre2=10.37=ha16e1b2_0
  - perl=5.32.1=0_h0d85af4_perl5
  - pigz=2.6=h5dbffcc_0
  - pip=21.2.4=pyhd8ed1ab_0
  - pixman=0.40.0=hbcb3906_0
  - pkginfo=1.7.1=pyhd8ed1ab_0
  - popt=1.16=h7b079dc_2002
  - prompt-toolkit=3.0.20=pyha770c72_0
  - prompt_toolkit=3.0.20=hd8ed1ab_0
  - psutil=5.9.2=py39ha30fb19_0
  - py-lief=0.11.5=py39h9fcab8e_0
  - pyasn1=0.4.8=py_0
  - pybind11-abi=4=hd8ed1ab_3
  - pycosat=0.6.3=py39h63b48b0_1010
  - pycparser=2.20=pyh9f0ad1d_2
  - pycrypto=2.6.1=py39h89e85a6_1006
  - pygithub=1.53=py_0
  - pygments=2.10.0=pyhd8ed1ab_0
  - pyjwt=1.7.1=py_0
  - pyrsistent=0.18.1=py39h63b48b0_1
  - pysocks=1.7.1=pyha2e5f31_6
  - python=3.9.13=h57e37ff_0_cpython
  - python-dateutil=2.8.2=pyhd8ed1ab_0
  - python-libarchive-c=4.0=py39h6e9494a_1
  - python-tzdata=2021.5=pyhd8ed1ab_0
  - python_abi=3.9=2_cp39
  - pytz=2021.1=pyhd8ed1ab_0
  - pytz-deprecation-shim=0.1.0.post0=py39h6e9494a_2
  - pyyaml=5.4.1=py39h701faf5_3
  - readline=8.1.2=h3899abd_0
  - reproc=14.2.3=h0d85af4_0
  - reproc-cpp=14.2.3=he49afe7_0
  - requests=2.28.1=pyhd8ed1ab_1
  - requests-oauthlib=1.3.0=pyh9f0ad1d_0
  - rich=10.16.1=pyhd8ed1ab_0
  - ripgrep=13.0.0=h244e342_0
  - rsa=4.7.2=pyh44b312d_0
  - rsync=3.2.7=ha1fed10_0
  - ruamel.yaml=0.17.21=py39h63b48b0_1
  - ruamel.yaml.clib=0.2.6=py39h63b48b0_1
  - ruamel_yaml=0.15.80=py39h701faf5_1007
  - s3transfer=0.6.0=pyhd8ed1ab_0
  - scrypt=0.8.18=py39hbfd427f_4
  - setuptools=65.3.0=pyhd8ed1ab_1
  - six=1.16.0=pyh6c4a22f_0
  - smartmontools=7.2=h940c156_0
  - smmap=3.0.5=pyh44b312d_0
  - soupsieve=2.3.1=pyhd8ed1ab_0
  - sqlite=3.38.5=hd9f0692_0
  - tapi=1100.0.11=h9ce4665_0
  - tk=8.6.12=h5dbffcc_0
  - toolz=0.11.1=py_0
  - tornado=6.2=py39h701faf5_0
  - tqdm=4.62.2=pyhd8ed1ab_0
  - traitlets=5.1.0=pyhd8ed1ab_0
  - typing_extensions=3.10.0.0=pyha770c72_0
  - tzdata=2021e=he74cb21_0
  - tzlocal=4.2=py39h6e9494a_1
  - urllib3=1.26.6=pyhd8ed1ab_0
  - vsts-python-api=0.1.22=py_0
  - watchgod=0.7=pyhd8ed1ab_0
  - wcwidth=0.2.5=pyh9f0ad1d_2
  - wget=1.20.3=h52ee1ee_1
  - wheel=0.37.0=pyhd8ed1ab_1
  - wrapt=1.14.1=py39h701faf5_0
  - xxhash=0.8.0=h35c211d_3
  - xz=5.2.5=haf1e3a3_1
  - yaml=0.2.5=haf1e3a3_0
  - yaml-cpp=0.7.0=hb486fe8_1
  - zipp=3.5.0=pyhd8ed1ab_0
  - zlib=1.2.13=hfd90126_4
  - zstd=1.5.2=hfa58983_4
  - pip:
    - pyopenssl==20.0.1
prefix: /Users/mfansler/miniconda3